home *** CD-ROM | disk | FTP | other *** search
/ The Business Master (3rd Edition) / The Business Master (3rd Edition).iso / files / spreotus / 123fin / check.bas (.txt) < prev    next >
Encoding:
GW-BASIC  |  1985-03-31  |  9.4 KB  |  300 lines

  1. 10  '                         CHECKBOOK PROGRAM
  2. 20  '   THIS PROGRAM WILL PROCESS MULTIPLE ACCOUNTS (WITH THE LIMIT CURRENTLY SET TO 5).
  3. 30  KEY OFF
  4. 31  SCREEN 0
  5. 32  WIDTH 80
  6. 40  CLEAR 4000                         'RESERVE STRING SPACE
  7. 50  DEFDBL A
  8. 60  MN=150                             'CHECKS PER MONTH
  9. 70  MA=5                               'MAX ACCOUNTS
  10. 80  DIM CR$(MN,MA),AB(MA),AN(MA)       'CHK RES, ACCT. BAL.,ACCT #
  11. 90  DIM CN(MA),NU$(25),MO$(12)         'CHK NOS, AMOUNTS, MONTHS
  12. 100  '---------------------------------------------------------------------------
  13. 110  'OPEN FILES, PROCESS DATE
  14. 120  REM
  15. 130  CLS
  16. 140  T$="CHEKBOOK -- A CHECK ACCOUNTING PROGRAM"
  17. 150  PRINT TAB(32-(LEN(T$)/2))T$
  18. 160  PRINT:PRINT "SYSTEM INITIALIZATION IN PROCESS,PLEASE WAIT"
  19. 170  ON ERROR GOTO 250
  20. 180  OPEN "I",1,"CRF/DAT": ON ERROR GOTO 0
  21. 190  FOR I=1 TO MA: INPUT #1,AN(I) : NEXT I
  22. 200  FOR I=1 TO MA : INPUT #1,AB(I) : NEXT I
  23. 210  FOR I=1 TO MA ; INPUT #1,CN(I) : NEXT I
  24. 220  IF EOF(1) THEN CLOSE: GOTO 300
  25. 230  INPUT #1,I,J : LINE INPUT #1,CR$(I,J)
  26. 240  GOTO 220
  27. 250  PRINT"ERROR, CHECK REGISTER FILE NOT FOUND.FILE WILL BE CREATED!"
  28. 260  PRINT "HIT ENTER TO CONTINUE"
  29. 270  A$=INKEY$ : IF A$="" GOTO 270 ELSE IF ASC(A$)<>13 GOTO 270
  30. 280  RESUME 290
  31. 290  ON ERROR GOTO 0
  32. 300  DT$=LEFT$(DATE$,2)+"/"+MID$ (DATE$,4,2)+"/"+RIGHT$(DATE$,2) : GOSUB 2510
  33. 310  IF VAL(DT$)<>0 GOTO 340
  34. 320  LINE INPUT "ENTER TODAY'S DATE (MM.DD.YY): ";DT$
  35. 330  GOTO 310
  36. 340  REM -------------------------------------------------------------------
  37. 350  REM             DISPLAY MENU,GET AND VALIDATE OPTIONS
  38. 360  REM
  39. 370  CLS
  40. 380  PRINT STRING$(24,"-")"CHEKBOOK MENU "STRING$(25,"-")
  41. 390  PRINT:PRINT
  42. 400  PRINT"     1 -- POST        POST A HAND WRITTEN CHECK"
  43. 410  PRINT"     2 -- WRITE       WRITE A CHECK"
  44. 420  PRINT"     3 -- STATEMENT   GENERATE THE CHECK STATEMENTS"
  45. 430  PRINT"     4 -- SETUP       SETUP A NEW ACCOUNT"
  46. 440  PRINT"     5 -- DEPOSIT     POST A DEPOSIT TO ACCOUNT"
  47. 450  PRINT"     6 -- PURGE       PURGE CURRENT MONTH'S CRF"
  48. 460  PRINT"     7 -- END         TERMINATE THE PROGRAM"
  49. 470  LOCATE 3,57 : PRINT DT$;
  50. 480  LOCATE 4,57 : PRINT RIGHT$(TIME$,8);
  51. 490  LOCATE 2,1  : PRINT "SELECT OPTION===> ";: LOCATE ,,1
  52. 500  A$=INKEY$ : IF A$="" GOTO 500
  53. 510  PRINTA$; : LOCATE ,,0 : OP=VAL(A$)
  54. 520  IF OP>=1 AND OP <=7 GOTO 550
  55. 530  LOCATE 1,49 : PRINT "INVALID OPTION";
  56. 540  GOTO 490
  57. 550  ON OP GOSUB 940, 1240, 1300, 1860, 2070, 2810, 2430
  58. 560  GOTO 370
  59. 570  REM-----------------------------------------------------------------------
  60. 580  REM                         COMMON CHECK DATA INPUT ROUTINE
  61. 590  REM
  62. 600  FOR I=3 TO 16:LOCATE I,1: PRINT STRING$(64," "):NEXT I
  63. 610  LOCATE 3,1
  64. 620  CD$(1)="     ACCOUNT:"+STRING$(15,CHR$(95))
  65. 630  CD$(2)="     WRITTEN TO:"+STRING$(25,CHR$(95))
  66. 640  CD$(3)="     CHECK AMOUNT:$"+STRING$(7,CHR$(95))
  67. 650  CD$(4)="     NOTES: "+STRING$(25,CHR$(95))
  68. 660  DX$=STRING$(1,CHR$(95)): DX$=DX$+"/"+DX$+"/"+DX$
  69. 670  CD$(5)="     DATE WRITTEN:  "+DX$
  70. 680  CD$(6)="     CHECK NUMBER:  "+STRING$(7,CHR$(95))
  71. 690  CN=-1
  72. 700  FOR I=1 TO 4: PRINT CD$(I): NEXT I
  73. 710  IF CC=1  THEN PRINT CD$(5) : PRINT CD$(6)
  74. 720  LOCATE 3,15,1 : GOSUB 840 : AC=VAL(IX$)
  75. 730  LOCATE 4,18,1 : GOSUB 840 : WT$=IX$
  76. 740  LOCATE 5,20,1 : GOSUB 840 : AM=VAL(IX$)
  77. 750  LOCATE 6,13,1 : GOSUB 840 : NT$=IX$
  78. 760  IF CC<>1 GOTO 800
  79. 770  LOCATE 7,20,1 : GOSUB 840 : DW$=IX$
  80. 780  LOCATE 8,20,1 : GOSUB 840 : CN=VAL(IX$)
  81. 790  PRINT
  82. 800  LOCATE 9,1 : INPUT "is this correct";AN$
  83. 810  IF AN$="NO" OR AN$="N" GOTO 600
  84. 820  IF AN$<>"YES" AND AN$<>"Y" GOTO 800
  85. 830   FOR I=9 TO 16 :LOCATE I,1 : PRINT STRING$(64," "): NEXT I : LOCATE 9,1 : RETURN
  86. 840  IX$="" :A$=INKEY$
  87. 850  A$=INKEY$ : IF A$="" THEN 850 ELSE IF ASC(A$)<>13 AND ASC(A$)<>0 AND ASC(A$)<>8 THEN PRINT A$;
  88. 860  IF ASC(A$)>31 THEN IX$=IX$+A$ : GOTO 850
  89. 870  IF ASC(A$)=8 THEN IF LEN(IX$)>0 THEN IX$= LEFT$(IX$,LEN(IX$)-1) : PRINT-CHR$(2); : GOTO 850
  90. 880  IF ASC(A$)=24 THEN PRINT " "; : FOR I=1 TO LEN(IX$) : PRINT CHR$(29)+" "=CHR$(29); : NEXT I : IX$="": GOTO 850
  91. 890  IF ASC(A$)=13 THEN LOCATE ,,0 : RETURN
  92. 900  GOTO 850
  93. 910  REM-----------------------------------------------------------------------
  94. 920  REM         POST A HAND WRITTEN CHECK HERE
  95. 930  REM
  96. 940  IF AN(1)=0 THEN GOSUB 1860
  97. 950  CLS
  98. 960  PRINT STRING$(20,"-")" CHECK POSTING ROUTINE "STRING$(21,"-")
  99. 970  CC=1 : GOSUB 600
  100. 980  FOR I=1 TO MA : IF AC=AN(I) GOTO 1020 ELSE NEXT I
  101. 990  PRINT"ERROR, ACCOUNT NOT FOUND, RE-ENTER,"
  102. 1000  INPUT "ACCOUNT NUMBER";AC
  103. 1010  GOTO 980
  104. 1020  FOR J=1 TO MN : IF CR$(J,I)="" GOTO 1050 ELSE NEXT J
  105. 1030  PRINT"ERROR, CHECK REGISTER IS FULL.  HIT ENTER TO CONTINUE."
  106. 1040  GOTO 1190
  107. 1050  CR$(J,I)=WT$+CHR$(255)+STR$(AM)+CHR$(255)+NT$+CHR$(255)
  108. 1060  IF DW$<>"" THEN CR$(J,I)=CR$(J,I)+DW$ ELSE CR$(J,I)=CR$(J,I)+LEFT$(TIME$,8)
  109. 1070  IF CC<>0 GOTO 1130
  110. 1080  IF (AB(I)-AM)>=0 GOTO 1130 ELSE PRINT "BALANCE WILL GO NEGATIVE."
  111. 1090  PRINT"WRITE CHECK ANYWAY"
  112. 1100  IF AN$="YES" OR AN$="Y" GOTO 1130
  113. 1110  IF AN$="NO" OR AN$="N" THEN CR$(J,I)="" : RETURN
  114. 1120  GOTO 1090
  115. 1130  AB(I)=AB(I)-AM
  116. 1140  IF CN=-1 THEN CN=CN(I) : CN(I)=CN(I)+1
  117. 1150  CR$(J,I)=STR$(CN)+CHR$(255)+CR$(J,I)
  118. 1160  IF AB(I)<0 THEN PRINT "BALANCE IS NOW NEGATIVE."
  119. 1170  IF OP<>1 THEN RETURN
  120. 1180  PRINT"ACCOUNT POSTED. HIT ENTER TO CONTINUE."
  121. 1190  A$=INKEY$ : IF A$="" GOTO 1190 ELSE IF ASC(A$)<>13 GOTO 1190
  122. 1200  RETURN
  123. 1210  REM--------------------------------------------------------------------
  124. 1220  REM                WRITE A CHECK ROUTINE
  125. 1230  REM
  126. 1240  IF AN(1)=0 THEN GOSUB 1860
  127. 1250  CLS
  128. 1260  PRINTSTRING$(20,"-")" CHECK WRITING ROUTINE " STRING$(21,"-")
  129. 1270  CC=0 : GOSUB 600 : GOSUB 980
  130. 1280  IF AN$<>"N" AND AN$<>"NO" THEN GOSUB 2550
  131. 1290  RETURN
  132. 1300  REM---------------------------------------------------------------------
  133. 1310  REM                PRINT CHECK REGISTER
  134. 1320  REM
  135. 1330  CLS
  136. 1340  PRINT STRING$(21,"-")" PRINT CHECK REGISTER "STRING$(21,"-")
  137. 1350  PRINT
  138. 1360  HD$="CHK #  TO WHOM WRITTEN                    AMOUNT
  139. 1370  F$="*****  \                           \$**,***.**\        \    \            \"
  140. 1380  D$="        \                           \$**,***.** \        \    \           \"
  141. 1390  INPUT "FOR ALL ACCOUNTS";AN$
  142. 1400  IF AN$="YES" OR AN$="Y" GOTO 1460
  143. 1410  IF AN$<>"NO" AND AN$<>"N" GOTO 1390
  144. 1420  INPUT "ACCOUNT";AC
  145. 1430  FOR I=1 TO MA : IF AN(I)=AC GOTO 1470 ELSE NEXT I
  146. 1440  PRINT "ERROR, ACCOUNT NOT FOUND. RE-ENTER."
  147. 1450  GOTO 1420
  148. 1460  I=1
  149. 1470  PRINT "ACCOUNT NUMBER: "AN(I);TAB(59);
  150. 1480  PRINT "REPORT DATE: ";LEFT$(TIME$,8)
  151. 1490  PRINT " "
  152. 1500  PRINT "CHECK REGISTER:"
  153. 1510  PRINT " "
  154. 1520  PRINT JD$
  155. 1530  PRINT" "
  156. 1540  CA=0 : DP=0
  157. 1550  J=1
  158. 1560  IF CR$(J,I)="" GOTO 1720
  159. 1570  CR$=CR$(J,I)
  160. 1580  FOR K=1 TO 4
  161. 1590     L=INSTR(CR$,CHR$(255))
  162. 1600     PT$(K)=LEFT$(CR$,L-1)
  163. 1610     CR$=RIGHT$(CR$,LEN(CR$)-L)
  164. 1620  NEXT K
  165. 1630  CN=VAL(PT$(1))
  166. 1640  AM=VAL(PT$(3))
  167. 1650  IF CN>=0 THEN CA=CA+AM : GOTO 1690
  168. 1660  PRINT USING D$;PT$(2),AM,PT$(4),CR$
  169. 1670  DP=DP+AM
  170. 1680  GOTO 1700
  171. 1690  PRINT USING F$;CN,PT$(2),AM,PT$(4),CR$
  172. 1700  J=J+1
  173. 1710  GOTO 1560
  174. 1720  PRINT " "
  175. 1730  PRINT USING "BEGINNING BALANCE:    $**,***.**";AB(I)=CA-DP
  176. 1740  PRINT USING "DEPOSITS:             $**,***.**";DP
  177. 1750  PRINT USING "TOTAL CHECKS:         $**,***.**";CA
  178. 1760  PRINT USING "CURRENT BALANCE:      $**,***.**";AB(I)
  179. 1770  IF AN$="NO" OR AN$="N" GOTO 1820
  180. 1780  I=I+1
  181. 1790  PRINT " "
  182. 1800  PRINT " "
  183. 1810  IF I<MA AND AN(I)<>0 GOTO 1470
  184. 1820  IF OP<>3 THEN RETURN
  185. 1830  PRINT "HIT ENTER TO CONTINUE"
  186. 1840  A$=INKEY$ : IF A$="" GOTO 1840 ELSE IF ASC(A$)<>13 GOTO 1840
  187. 1850  RETURN
  188. 1860  REM--------------------------------------------------------------------
  189. 1870  REM                SET-UP AN ACCOUNT
  190. 1880  REM
  191. 1890  CLS
  192. 1900  PRINT STRING$(20,"-")" ACCOUNT SET-UP ROUTINE "STRING$(20,"-")
  193. 1910  PRINT
  194. 1920  IF AN(1)=0 THEN PRINT "NO ACCOUNTS SET-UP YET."
  195. 1930  PRINT
  196. 1940  FOR I=1 TO MA :  IF AN(I)=0 GOTO 1970 ELSE NEXT I
  197. 1950  PRINT "ERROR, ACCOUNT RESGISTER FULL"
  198. 1960  RETURN
  199. 1970  INPUT "ACCOUNT NUMBER";AN(I)
  200. 1980  INPUT "STARTING ACCOUNT BALANCE";AB(I)
  201. 1990  INPUT "NEXT CHECK NUMBER FOR THIS ACCOUNT";CN(I)
  202. 2000  PRINT
  203. 2010  PRINT "ACCOUNT ESTABLISHED.  HIT ENTER TO CONTINUE."
  204. 2020  A$=INKEY$ : IF A$="" GOTO 2020 ELSE IF ASC(A$)<>13 GOTO 2020
  205. 2030  RETURN
  206. 2040  REM-----------------------------------------------------------------------
  207. 2050  REM                POST A DEPOSIT
  208. 2060  REM
  209. 2070  CLS
  210. 2080  PRINT STRING$(24,"-")" POST A DEPOSIT "STRING$(24,"-")
  211. 2090  PRINT
  212. 2100  INPUT "ACCOUNT NUBMER";AC
  213. 2110  FOR I=1 TO MA : IF AN(I)=AC GOTO 2140 ELSE NEXT I
  214. 2120  PRINT "ERROR,ACCOUNT NUMBER NOT FOUND.  RE-ENTER"
  215. 2130  GOTO 2100
  216. 2140  INPUT "DEPOSIT AMOUNT";DA
  217. 2150  FOR J=1 TO MN : IF CR$(J,I)="" GOTO 2190 ELSE NEXT J
  218. 2160  PRINT"ERROR, CHECK REGISTER FULL.  HIT ENTER TO CONTINUE"
  219. 2170  A$=INKEY$ : IF A$="" GOTO 2170 ELSE IF ASC(A$)<>13 GOTO 2170
  220. 2180  GOTO 2230
  221. 2190  CR$(J,I)="-1"+CHR$(255)+ LEFT$(TIME$,8)
  222. 2200  AB(I)=AB(I)+DA
  223. 2210  PRINT"DEPOSIT POSTED.  HIT ENTER TO CONTINUE."
  224. 2220  A$=INKEY$ :IF A$="" GOTO 2220 ELSE IF ASC(A$)<>13 GOTO 2220
  225. 2230  RETURN
  226. 2240  REM----------------------------------------------------------------
  227. 2250  REM                        TERMINATION PROCESSING
  228. 2260  REM
  229. 2270  CLS
  230. 2280  PRINT STRING$(21,"-")" TERMINATION PROCESSING "STRING$(22,"-")
  231. 2290  PRINT
  232. 2300  PRINT "WRITING CHECK REGISTER FILE."
  233. 2310  OPEN "O",1,"CRF/DAT"
  234. 2320  FOR I=1 TO MA : PRINT #1,AN(I) : NEXT I
  235. 2330  FOR I=1 TO MA : PRINT #1,AB(I) : NEXT I
  236. 2340  FOR I=1 TO MA : PRINT #1,CN(I) : NEXT I
  237. 2350  FOR I=1 TO MA
  238. 2360     FOR J=1 TO MN
  239. 2370         IF CR$(J,I)="" GOTO 2400
  240. 2380       PRINT #1,J,I,CR$(J,I)
  241. 2390    NEXT J
  242. 2400  NEXT I
  243. 2410  CLOSE
  244. 2420  PRINT "PROGRAM ENDED."
  245. 2430  RUN"MENU.BAT"
  246. 2440  REM-----------------------------------------------------------------------
  247. 2450  REM                FORMAT AND PRINT CHECK (DATA)
  248. 2460  REM
  249. 2470  DATA ONE, TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE, TEN
  250. 2480  DATA ELEVEN, TWELVE, THIRTEEN, FOURTEEN, FIFTEEN, TWENTY, THIRTY
  251. 2490  DATA FORTY, FIFTY, SIXTY,SEVENTY, EIGHTY, NINETY
  252. 2500  DATA JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC
  253. 2510  FOR I=1 TO 23 : READ NU$(I) : NEXT I : FOR I=1 TO 12 : READ MO$(I) : NEXT I : RETURN
  254. 2520  REM-----------------------------------------------------------------------
  255. 2530  REM                                FORMAT AND PRINT CHECK
  256. 2540  REM
  257. 2550  WD$=""
  258. 2560  A1=INT(AM/1000)
  259. 2570  A2=INT((AM-A1*1000)/100)
  260. 2580  A3=INT(AM-(A1*1000+A2*100))
  261. 2590  A4=AM-INT(AM)
  262. 2600  IF A1<>0 THEN WD$=NU$(A1)+"THOUSAND"
  263. 2610  IF A2<> 0 THEN WD$=WD$+NU$(A2)+" HUNDRED "
  264. 2620  IF A3=0 GOTO 2700
  265. 2630  IF A3<16 THEN WD$=WD$+NU$(A3) : GOTO 2700
  266. 2640  IF A3<20 GOTO 2690
  267. 2650  A5=INT(A3/10) : A3=A3-10*A5
  268. 2660  IF A3<>0 GOTO 2680
  269. 2670  WD$=WD$=NU$(A5+14): GOTO 2700
  270. 2680  WD$=WD$ +NU$(A5+14)+"-"+NU$(A3) : GOTO 2700
  271. 2690  WD$=WD$+NU$(A3-10)+"TEEN"
  272. 2700  WD$=WD$+" AND"+STR$(INT(A4*100))+"/100'S"
  273. 2710  PRINT TAB(41);MO$(VAL(TIME$));" ";MID$ (TIME$,4,2);",";TAB(56);MID$(TIME$,7,2)
  274. 2720  PRINT " "
  275. 2730  PRINT TAB(10);WT$;TAB(58); : PRINT USING "**,***.**";AM
  276. 2740  PRINT TAB(10);WT$;TAB(58); : PRINT USING "**,***.**";AM
  277. 2750  PRINT " "
  278. 2760  PRINT WD$
  279. 2770  PRINT " "
  280. 2780  PRINT WD$
  281. 2790  PRINT TAB(5);NT$
  282. 2800  RETURN
  283. 2810  REM ----------------------------------------------------------------
  284. 2820  REM                PURGE CURRENT CRF
  285. 2830  REM
  286. 2840  CLS
  287. 2850  PRINT STRING$(22,"-")" PURGE CURRENT CRF "STRING$(23,"-")
  288. 2860  GOSUB 1360
  289. 2870  IF AN$="YES" OR AN$="Y" GOTO 2890
  290. 2880  FOR I=1 TO MA : IF AN(I)=AC GOTO 2900 ELSE NEXT I
  291. 2890  FOR I=T TO MA
  292. 2900     FOR J=1 TO NM
  293. 2910         CR$(J,I)=""
  294. 2920     NEXT J
  295. 2930     IF AN$="NO" OR AN$="N" GOTO 2950
  296. 2940  NEXT I
  297. 2950  PRINT "CRF PURGED.  HIT ENTER TO CONTINUE."
  298. 2960  A$=INKEY$ : IF A$="" GOTO 2960 ELSE IF ASC(A$)<>13 GOTO 2960
  299. 2970  RETURN
  300.